class Solution {
    public int profitableSchemes(int n, int m, int[] g, int[] p) {
          int len = g.length ;
          int[][] dp = new int[n+1][m+1] ;
          int MOD = (int) 1e9+7 ; 
          for(int i=0 ; i<= n ; i ++){
            dp[i][0] = 1 ;
          }
          for(int i=0 ; i< len ; i ++){
            for(int j=n ; j>=0 ; j --){
                for(int k=m ; k>= 0 ; k --){
                    if(j>=g[i]){
                        dp[j][k] += dp[j-g[i]][Math.max(0 , k-p[i])]; 
                    }
                    dp[j][k]  %= MOD;  
                }
            }
          }
       return dp[n][m];
           }
}